#ifndef clox_table_h
#define clox_table_h

#include "common.h"
#include "value.h"

typedef struct {
    ObjString* key;
    Value value;
} Entry;

typedef struct {
    // 当前存储在其中的键/值对数量
    int count;
    // 跟踪数组的分配大小
    int capacity;
    Entry* entries;
} Table;

void initTable(Table* table);
void freeTable(Table* table);
bool tableGet(Table* table, ObjString* key, Value* value);
bool tableSet(Table* table, ObjString* key, Value value);
bool tableDelete(Table* table, ObjString* key);
void tableAddAll(Table* from, Table* to);
// 要在表中查找字符串，我们不能使用普通的tableGet()函数，因为它调用了findEntry()，这正是我们现在试图解决的重复字符串的问题。
ObjString* tableFindString(Table* table, const char* chars,
                           int length, uint32_t hash);
#endif